// 通过伪代码描述问题.
// 表示平面上的一个点
//class Point {
    // 构造方法
    // 通过横坐标、纵坐标
    /*public Point(double x, double y){

    }

    // 通过极坐标系
    public Point(double r, double a){

    }*/

    // 无法编译，此处的两个构造方法不能形成重载
//}

// 工厂模式，就是为了解决上述问题的
// 上述问题本质上 构造对象依赖了构造方法，构造方法又要名字固定的
// 如果构造对象过程不依赖构造方法，可以通过不同名字的方法 区别不同的构造方式了

// 解决上述问题，引入工厂设计模式
class Point {
    public Point(){

    }

    // 提供一系列 set 方法，来针对类进行设置
    void setXXX(){

    }
}

// Point 的工厂类
class PointFactory {
    // 工厂方法
    public static Point buildPointByXY(double x, double y){
        Point p = new Point();
        // 把 x,y 通过 set 系列方法设置进去
        p.setXXX();
        return p;
    }

    // 工厂方法
    public static Point buildPointByRA(double r, double a){
        Point p = new Point();
        // 把 r,a 通过 set 系列方法设置进去
        p.setXXX();
        return p;
    }
}

public class Test1 {
}
